package com.etoak.stock.controller;

import com.etoak.stock.pojo.domin.SysAddUserDomain;
import com.etoak.stock.pojo.domin.SysUserDomain;
import com.etoak.stock.service.UserService;
import com.etoak.stock.pojo.entity.SysUser;
import com.etoak.stock.vo.req.LoginReqVo;
import com.etoak.stock.vo.req.UpdateUserRoleVo;
import com.etoak.stock.vo.req.UpdateUserVo;
import com.etoak.stock.vo.req.UserPageReqVo;
import com.etoak.stock.vo.resp.LoginRespVo;
import com.etoak.stock.vo.resp.PageResult;
import com.etoak.stock.vo.resp.R;
import com.etoak.stock.vo.resp.UserInfoResp;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;
@Api(tags = "用户相关接口处理")
@RestController
@RequestMapping("/api")
public class UserController {
    @Autowired
    UserService userService;
    //定义result风格 使用@PathVariable("username")注解取得username
    @ApiOperation(value = "根据用户名查询信息")
    @ApiImplicitParams(@ApiImplicitParam(name = "name",value = "用户名",dataType = "string",required = true,type = "path"))
    @GetMapping("/user/{username}")
    public SysUser getUserByUserName(@PathVariable("username") String username){
        return userService.finUserInfoByUserName(username);
    }
    /*
    *
    * 用户登录controller
    * */
/*   @ApiOperation(value = "用户登录")
    @PostMapping("/login")
    public R<LoginRespVo> login(@RequestBody LoginReqVo loginReqVo){
        return  userService.login(loginReqVo);
    }*/
    /*
    * 验证码功能的实现
    * */
    @SuppressWarnings("rawtypes")
    @ApiOperation(value = "验证码功能的实现")
    @GetMapping("/captcha")
    public R<Map> getCaptchaCode(){
        return userService.getCaptchaCode();
    }

    /*
     * @author 孙有泽
     * @date 2024/10/24 13:55
     * @description 多条件综合查询用户分页信息，条件包含：分页信息 用户创建日期范围
     */
    @ApiOperation(value = "多条件综合查询用户分页信息")
    @PostMapping("/users")
    public R<PageResult<SysUserDomain>> getUsers(@RequestBody UserPageReqVo userPageReqVo){
        return userService.getUsers(userPageReqVo);
    }
    /*
     * @author 孙有泽
     * @date 2024/10/24 13:56
     * @description 添加用户信息
     */

    @PostMapping("/user")
    public R addUser(@RequestBody SysAddUserDomain syxAddUserDomain){
        return userService.addUser(syxAddUserDomain);
    }

    /*
     * @author 孙有泽
     * @date 2024/10/24 16:15
     * @description 获取用户具有的角色信息，以及所有角色信息
     */
    @GetMapping("/user/roles/{userId}")
    public R<Map<String, List>> getUserRoles(@PathVariable("userId") String userId){
        return  userService.getUserRoles(userId);
    }
    /*
     * @author 孙有泽
     * @date 2024/10/24 17:12
     * @description 更新用户角色信息
     */
    @PutMapping("/user/roles")
    public R updateUserRoles(@RequestBody UpdateUserRoleVo updateUserRoleVo){
        return userService.updateUserRole(updateUserRoleVo);

    }
    /*
     * @author 孙有泽
     * @date 2024/10/25 10:07
     * @description 根据用户id查询用户信息
     */
    @GetMapping("/user/info/{userId}")
    public R<UserInfoResp> getUserById(@PathVariable("userId") String userId){
            return userService.getUserById(userId);
    }
    /*
     * @author 孙有泽
     * @date 2024/10/26 14:08
     * @description 根据id更新用户基本信息
     */
    @PutMapping("/user")
    public R updateUser(@RequestBody UpdateUserVo updateUserVo){
        return userService.updateUser(updateUserVo);
    }

    /*
     * @author 孙有泽
     * @date 2024/11/10 14:05
     * @description
     */

    @DeleteMapping("/user")
    public R deleteBatchUser(@RequestBody() List<Long> userIds){
        return userService.deleteBatchUser(userIds);
    }


}
